home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / prog / amisl090.zip / POPUP.C < prev    next >
C/C++ Source or Header  |  1992-09-12  |  3KB  |  124 lines

  1. /************************************************************************/
  2. /*                                    */
  3. /* POPUP.C    Request pop-up of a specific AMIS-compliant TSR      */
  4. /* Public Domain 1992 Ralf Brown                    */
  5. /* Version 0.90                             */
  6. /* Last Edit: 9/12/92                            */
  7. /*                                                                      */
  8. /* Must be compiled in a large data model (compact recommended)        */
  9. /* ex.    TCC -mc POPUP FINDTSRS.OBJ                    */
  10. /*                                    */
  11. /************************************************************************/
  12.  
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <alloc.h>
  16. #include <string.h>
  17. #include <dos.h>
  18.  
  19. extern int find_TSRs(char *mpx_numbers, char *manuf, char *name) ;
  20.  
  21. /************************************************************************/
  22.  
  23. #define lengthof(x) (sizeof(x)/sizeof(x[0]))
  24.  
  25. char *reasons[] =
  26.    {
  27.     "unknown failure",
  28.     "interrupts pass through swapped memory",
  29.     "swap-in failed",
  30.     "(unknown return code)"
  31.    } ;
  32.    
  33. /************************************************************************/
  34.  
  35. void usage(void)
  36. {
  37.    printf("Usage:\tPOPUP product\n") ;
  38.    printf("\tPOPUP manufacturer product\n") ;
  39.    printf("\t\tboth <manufacturer> and <product> may be abbreviated\n") ;
  40.    exit(1) ;
  41. }
  42.  
  43. /************************************************************************/
  44.  
  45. int main(int argc,char **argv)
  46. {
  47.    char mpx_numbers[256] ;
  48.    union REGS regs ;
  49.    int found, i ;
  50.    char *manuf, *name ;
  51.  
  52.    printf("POPUP\tPublic Domain 1992 Ralf Brown\n") ;
  53.    if (argc == 1 || argc > 3)
  54.       usage() ;
  55.    if (argc == 2)
  56.       {
  57.       manuf = NULL ;
  58.       name = argv[1] ;
  59.       }
  60.    else
  61.       {
  62.       manuf = argv[1] ;
  63.       name = argv[2] ;
  64.       }
  65.    found = find_TSRs(mpx_numbers,manuf,name) ;    
  66.    switch (found)
  67.       {
  68.       case 0:
  69.      printf("No matching TSR found\n") ;
  70.      break ; 
  71.       case 1:
  72.      printf("Requesting popup....\n") ;
  73.      regs.h.ah = mpx_numbers[0] ;
  74.      regs.h.al = 0x03 ;
  75.      int86(0x2D,®s,®s) ;
  76.      switch(regs.h.al)
  77.         {
  78.         case 0:
  79.            printf("TSR does not provide a popup service.\n") ;
  80.            break ;
  81.         case 1:
  82.            printf("Can't pop up now, try again later.\n") ;
  83.            break ;
  84.         case 2:
  85.            printf("Will pop up when able....\n") ;
  86.            break ;
  87.         case 3:
  88.            printf("TSR is busy.\n") ;
  89.            break ;
  90.         case 4:
  91.            printf("TSR requires user intervention before popup.\n") ;
  92.            if (regs.x.bx >= lengthof(reasons)-1)
  93.           regs.x.bx = lengthof(reasons)-1 ;
  94.            printf("Standard Reason: %s\n",reasons[regs.x.bx]) ;
  95.            printf("Application Reason Code %4.04X\n",regs.x.cx) ;
  96.            break ;
  97.         case 0xFF:
  98.            printf("TSR successfully popped up, return code %4.04X\n",
  99.                   regs.x.bx) ;
  100.            break ;
  101.         default:
  102.            printf("Unknown return code %2.02X\n",regs.h.al) ;
  103.            break ;
  104.         }
  105.      break ;
  106.       default:
  107.      printf("The specified name matches the following TSRs:\n") ;
  108.      printf("   Manufact  Product\n") ;
  109.      printf("   -------- --------\n") ;
  110.      for (i = 0 ; i < found ; i++)
  111.         {
  112.         char far *sig ;
  113.         
  114.         regs.h.ah = mpx_numbers[i] ;
  115.         regs.h.al = 0 ;
  116.         int86(0x2D,®s,®s) ;
  117.         sig = MK_FP(regs.x.dx,regs.x.di) ;
  118.         printf("   %8.8s %8.8s\n",sig,sig+8) ;
  119.         }
  120.      break ;
  121.       }
  122.    return 0 ;
  123. }
  124.